% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.

%%% @author CA Meijer
%%% @copyright 2012 CA Meijer
%%% @doc This module provides functions for managing licenses.
%%% @end

-module(nimbula_license).

%% Include files
-include("nimbula_records.hrl").

%% Exported Functions
-export([add/2,
		 delete/2,
		 get/2,
		 import_file/2,
		 list/1]).

%% API Functions
add(Pid, License) when is_binary(License) ->
	add(Pid, binary_to_list(License));
add(Pid, License) when is_list(License) ->
	License2 = escape(License, []),
	License3 = "{\"code\": \"" ++ License2 ++ "\", \"uri\": null}",
	License4 = list_to_binary(License3),
	case nimbula:post(Pid, "license/", License4) of
		{ok, Json} ->
			nimbula_json:json_to_record(?record_fields(license), Json);
		Error ->
			Error
	end.

delete(Pid, License) ->
	nimbula_objects:delete(Pid, ?record_fields(license), License).

get(Pid, License) ->
	nimbula_objects:get(Pid, ?record_fields(license), License).

import_file(Pid, File) ->
	{ok, BinLicenseData} = file:read_file(File),
	add(Pid, BinLicenseData).

list(Pid) ->
	nimbula_objects:list(Pid, ?record_fields(license)).

escape([], Result) ->
	lists:reverse(Result);
escape([$\n|Tail], Result) ->
	escape(Tail, Result);
escape([$\r|Tail], Result) ->
	escape(Tail, Result);
escape([$"|Tail], Result) ->
	escape(Tail, [$", $\\] ++ Result);
escape([H|Tail], Result) ->
	escape(Tail, [H|Result]).
